package com.ciei.dpagm.common.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Collection;


/**
 * 真正实现批量插入的拓展接口
 * @param <T>
 * @author kiho
 * @date 2021/02/10 09:54
 **/
@Repository
public interface ExpandBaseMapper<T> extends BaseMapper<T> {


    /**
     * 批量插入 仅适用于mysql
     *
     * @param entityList 实体列表
     * @return 影响行数
     */
    Integer insertBatchSomeColumn(Collection<T> entityList);

    /**
     * 创建数据库
     * @param newActualDatabaseName 数据库名
     * @return 匹配行数
     */
    Integer createDatabaseIfAbsent(@Param("newActualDatabaseName") String newActualDatabaseName);

    /**
     * 根据现有的表创建新的分表(复制表结构)
     * @param newActualDatabaseName 新的实际数据库名
     * @param newActualTableName 新的实际表名
     * @param originalDatabaseName 现有数据库名
     * @param originalTableName 现有表名
     */
    void createTableIfAbsentLikeOldTable(@Param("newActualDatabaseName") String newActualDatabaseName, @Param("newActualTableName") String newActualTableName
            , @Param("originalDatabaseName") String originalDatabaseName, @Param("originalTableName") String originalTableName);

    /**
     * TODO shardingsphere未声明information_schema数据源，需要单独获取
     * 从指定数据库中，查询是否存在某张表
     *
     * @param databaseName 实际数据库名
     * @param tableName 实际表名
     * @return 结果记录数（表存在正常结果是1）
     */
    Integer isTableExist(@Param("databaseName") String databaseName, @Param("tableName") String tableName);
}